package com.fzy.designpattern.observer.custom;

import java.util.ArrayList;
import java.util.List;

/**
 * 主题实现类
 *
 * @author 冯赵杨
 * @create 2018/9/12
 */
public class SubjectImpl implements Subject {

    /**
     * 存放订阅者
     *
     * @author 冯赵杨
     * @create 2018/9/12
     */
    private List<Observer> observers = new ArrayList<>();

    /**
     * 状态
     *
     * @author 冯赵杨
     * @create 2018/9/12
     */
    private int state;


    /**
     * 添加观察者
     *
     * @param obj
     * @return
     * @author 冯赵杨
     * @create 2018/9/12
     */
    @Override
    public void addObserver(Observer obj) {
        observers.add(obj);
    }

    /**
     * 移除观察者
     *
     * @param obj
     * @return
     * @author 冯赵杨
     * @create 2018/9/12
     */
    @Override
    public void removeObserver(Observer obj) {
        observers.remove(obj);
    }

    /**
     * 当主题方法改变时,这个方法被调用,通知所有的观察者
     *
     * @return
     * @author 冯赵杨
     * @create 2018/9/12
     */
    @Override
    public void notifyObserver() {
        for (Observer item : observers) {
            item.update(state);
        }
    }

    /**
     * 通知发布
     *
     * @return
     * @author 冯赵杨
     * @create 2018/9/12
     */
    public void publish() {
        //新的状态改变
        this.state++;
        this.notifyObserver();
    }
}
